<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>16 生命周期</title>
</head>
<body>
  <div id="app">
    <input type="text" v-model="msg">
  </div>
</body>
<script src="lib/vue.js"></script>
<script>
  
  const app = new Vue({
    data: {
      msg: '123'
    },
    beforeCreate() {
      // 在实例初始化之后,进行数据侦听和事件/侦听器的配置之前同步调用
      // 一般没什么用
      console.log('beforeCreate')
    },
    created() {
      // 在实例创建完成后被立即同步调用。在这一步中，实例已完成对选项的处理，意味着以下内容已被配置完毕：数据侦听、计算属性、方法、事件/侦听器的回调函数。然而，挂载阶段还没开始，且 $el property 目前尚不可用。
      // 可以做数据的请求 （胎教） --- 但是不能做dom操作（打他）
      console.log('created')
    },
    beforeMount() {
      // 在挂载开始之前被调用：相关的 render 函数首次被调用。
      // 一般没什么用
      console.log('beforeMount')
    },
    mounted() {
      // 实例被挂载后调用，这时 el 被新创建的 vm.$el 替换了。如果根实例挂载到了一个文档内的元素上，当 mounted 被调用时 vm.$el 也在文档内。
      // 可以做数据的请求（早教） --- 做DOM操作 --- 定时器，计时器
      console.log('mounted')
    },
    beforeUpdate() {
      // 一般没什么用
      console.log('beforeUpdate')
    },
    updated() {
      // 不做数据请求，可以做DOM操作（考试考砸挨打）
      console.log('updated')
    },
    beforeDestroy () {
      // 一般销毁对象，消除定时器计时器 - 立遗嘱
      console.log('beforeDestroy')
    },
    destroyed() {
      // 一般没什么用
      console.log('destroyed')
    },
    watch: {
      msg (newVal) {
        if (newVal === '12345678') {
          this.$destroy()
        }
      }
    }
  }).$mount('#app')
</script>
</html>